package cn.zhz.gen.core;

import com.baomidou.mybatisplus.core.toolkit.StringPool;

import java.lang.reflect.Method;

/**
 * @author ZHZ
 * @since 2023-01-18
 */
public class FastControllerConfig {


    /**
     * controller统一返回值实体类全路径，带包名
     */
    private String resultPath;

    /**
     * 统一返回值成功方法名称全路径
     */
    private String resultSuccessMethod;

    /**
     * 统一返回值构建类包路径
     */
    private String resultMethodPackage;

    /**
     * 第一步创建（唯一入口）
     *
     * @return
     */
    public static FastControllerConfig create() {
        return new FastControllerConfig();
    }


    /**
     * 配置controller统一返回值和成功方法
     *
     * @param controllerResultClass 统一返回值类
     * @param method                成功返回方法
     * @return
     */
    public FastControllerConfig resultSuccessMethod(Class<?> controllerResultClass, Method method) {

        String controllerResultPath = controllerResultClass.getCanonicalName();
        if (!method.getReturnType().equals(controllerResultClass)) {
            throw new RuntimeException(String.format("%s方法返回值类型和%s不匹配", method.getName(), controllerResultPath));
        }
        Class<?> declaringClass = method.getDeclaringClass();
        String classPath = declaringClass.getCanonicalName();
        // 构建result的类不是result本类需要额外导入
        if (!declaringClass.equals(controllerResultClass)) {
            this.resultMethodPackage = classPath;
        }
        String className = classPath.substring(classPath.lastIndexOf(StringPool.DOT) + 1);

        this.resultPath = controllerResultPath;
        this.resultSuccessMethod = className.concat(StringPool.DOT).concat(method.getName());
        return this;
    }

    protected String getResultPath() {
        return resultPath;
    }

    protected String getResultSuccessMethod() {
        return resultSuccessMethod;
    }

    protected String getResultMethodPackage() {
        return resultMethodPackage;
    }
}
